﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Poco;

namespace Metier
{
    public class GestionUtilisateur
    {
        public void MiseAJour(Utilisateur utilisateur)
        {
            try
            {
                using (Context db = new Context())
                {
                    db.Utilisateurs.Attach(utilisateur);
                    db.ObjectStateManager.ChangeObjectState(utilisateur, System.Data.EntityState.Modified);
                    db.SaveChanges();
                }
            }
            catch (ArgumentNullException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void Ajouter(Utilisateur utilisateur, bool envoyerMailConfirmation)
        {
            try
            {
                using (Context db = new Context())
                {
                    utilisateur.DateCreation = DateTime.Now;
                    db.Utilisateurs.AddObject(utilisateur);
                    db.SaveChanges();
                }

                if (envoyerMailConfirmation)
                {
                    Mail mail = new Mail();

                    mail.Destinataire = utilisateur.Email;

                    mail.Titre = "Compte Crée sur YouFood WebApp";

                    StringBuilder str = new StringBuilder("Bienvenue sur la plateforme WebApp de YouFood !<br />");
                    str.Append("Vous pouvez maintemant vous authentifier sur la WebApplication YouFood. Pour cela utiliser les informations ci dessus : <br />");
                    str.Append("Email : " + utilisateur.Email + "<br />");
                    str.Append("Mot de passe : " + utilisateur.Password + "<br /><br />");
                    str.Append("Bonne journée à vous<br />");
                    str.Append("You Food WebApp");

                    mail.envoyer();
                }
            }
            catch (ArgumentNullException ex)
            {
                throw ex;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void ChangerMotdePasse(string email, string vieuxMotDePasse, string nouveauMotDePasse)
        {
            try
            {
                using (Context db = new Context())
                {
                    Utilisateur utilisateur = Chercher(email);

                    if (utilisateur.Password == vieuxMotDePasse)
                    {
                        utilisateur.Password = nouveauMotDePasse;

                        MiseAJour(utilisateur);
                    }
                }
            }
            catch (ArgumentNullException ex)
            {
                throw new Exception("Erreur Metier : Echec Changement de mot de passe : un parametre est null", ex);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public Utilisateur Chercher(string email)
        {
            try
            {
                using (Context db = new Context())
                {
                    return (from u in db.Utilisateurs
                            where u.Email == email
                            select u).FirstOrDefault();
                }
            }
            catch (ArgumentNullException ex)
            {
                throw new Exception("Erreur Metier : Echec Recuperation Utilisateur : email est null", ex);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<Utilisateur> Lister()
        {
            try
            {
                using (Context db = new Context())
                {
                    return db.Utilisateurs.ToList();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void Supprimer(Utilisateur utilisateur, bool envoyerMessage)
        {
            try
            {
                using (Context db = new Context())
                {
                    db.Utilisateurs.DeleteObject(utilisateur);
                    db.SaveChanges();
                }

                if (envoyerMessage)
                {
                    Mail mail = new Mail();

                    mail.Destinataire = utilisateur.Email;

                    mail.Titre = "Suppression de compte sur YouFood WebApp";

                    StringBuilder str = new StringBuilder("Bonjour, <br />");
                    str.Append("Votre compte sur la WebApplication YouFood vient d'etre supprimé.<br />");
                    str.Append("Si vous souhaitez contester cette decision, veuillez prendre rendez avec votre manager.<br />");
                    str.Append("Bonne journée à vous<br />");
                    str.Append("You Food WebApp");

                    mail.envoyer();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
